#ifndef CAN_DRIVER_H
#define CAN_DRIVER_H

#include "can.h"


/***********************功能码**************************/
/***********************功能码**************************/
typedef enum {
    R_DEVICE_ID               = 0x00,      /* 读取设备ID */
    R_MOTOR_STATUS            = 0x01,      /* 读取电机状态 */
    R_FOC_CURRENT             = 0x02,      /* 读取foc电流 */
    R_FOC_LOCATION            = 0x03,      /* 读取foc位置 */
    R_Pulse_NUM               = 0x04,      /* 读取累计脉冲数（用于计算当前步数） */

    R_RCUR                    = 0x05,      /* 读取额定电流 */
    R_CCUR                    = 0x06,      /* 读取校准电流 */
    R_Divide                  = 0x07,      /* 读取电机细分 */
    R_RATE_SPEED              = 0x08,      /* 读取额定转速 */
    R_RATE_UPACC              = 0x09,      /* 读取固件额定加速加速度 */
    R_RATE_DOWNACC            = 0x0A,      /* 读取固件额定减速加速度 */
    R_RATE_UPCURRATE          = 0x0B,      /* 读取固件额定增流梯度 */
    R_RATE_DOWNCURRATE        = 0x0C,      /* 读取固件额定减流梯度 */

    S_RCUR                    = 0x0D,      /* 设置额定电流 */
    S_CCUR                    = 0x0E,      /* 设置校准电流 */
    S_Divide                  = 0x0F,      /* 设置电机细分 */
    S_RATE_SPEED              = 0x10,      /* 设置额定转速 */
    S_RATE_UPACC              = 0x11,      /* 设置固件额定加速加速度 */
    S_RATE_DOWNACC            = 0x12,      /* 设置固件额定减速加速度 */
    S_RATE_UPCURRATE          = 0x13,      /* 设置固件额定增流梯度 */
    S_RATE_DOWNCURRATE        = 0x14,      /* 设置固件额定减流梯度 */

    S_MODE                    = 0x15,      /* 设置电机运行模式 */
    S_DCE                     = 0x16,      /* 设置DCE参数 */
    S_PID                     = 0x17,      /* 设置PID参数 */
    S_GOAL_LOACTION           = 0x18,      /* 设置硬目标位置 */
    S_GOAL_SPEED              = 0x19,      /* 设置硬目标速度 */
    S_GOAL_CURRENT            = 0x1A,      /* 设置硬目标电流 */
    S_LOACTION_UP_ACC         = 0x1B,      /* 软目标位置加速度 */
    S_SPEED_UP_ACC            = 0x1C,      /* 软目标速度加速度 */
    S_CURRENT_UP_RATE         = 0x1D,      /* 软目标电流增流梯度 */
    S_LOACTION_DOWN_ACC       = 0x1E,      /* 软目标位置减速度 */
    S_SPEED_DOWN_ACC          = 0x1F,      /* 软目标速度减速度 */
    S_CURRENT_DOWN_RATE       = 0x20,      /* 软目标电流减流梯度 */
    S_LOCATION_MAX_SPEED      = 0x21,      /* 位置模式最大速度 */
    S_MOTOR_STALL             = 0x22,      /* 设置电机堵转 */
    S_MOTOR_CLEAN_STALL       = 0x23,      /* 清除电机堵转标记 */
    
    S_MOTOR_PARAM_SAVE        = 0x24,      /* 电机参数保存 */
    S_MOTOR_DEVICE_ID         = 0x25,      /* 设置设备ID */

    S_MOTOR_STOP              = 0x26,      /* 电机停止运行 */
    S_MOTOR_SYNCH             = 0x27,      /* 设置多机同步 */
    S_ZERO_LOCATION           = 0x28,      /* 设置零位置 */
    S_MOTOR_BRAKE             = 0x29,      /* 设置电机刹车 */

}Function_Code;

/***********************功能码**************************/
/***********************功能码**************************/

typedef enum{
    DCE_KP = 1,
    DCE_KI = 2,
    DCE_KV = 3,
    DCE_KD = 4
}DCE_PID;

typedef enum{
    PID_KP = 1,
    PID_KI = 2,
    PID_KD = 3
}PID_PID;

// 
typedef enum{
    Task_Failure           = 0x00,     // 任务失败
    Task_Success           = 0x01,     // 任务成功
    SetSuccess             = 0x02,     // 设置成功
    ReadSuccess            = 0x03,     // 读取成功
    SaveSuccess            = 0x04,     // 保存成功
    SaveFailure            = 0x05,     // 保存失败
    Illegal_Parameter      = 0x05,     // 非法参数
    Illegal_Mode           = 0x06,     // 未知模式
    Illegal_Command        = 0xFF,     // 未知指令
}Status_Code;

typedef union 
{
    int32_t val;
    int16_t val16[2];
    uint8_t bytes[4];
}Goal_Param;

void Pro_CAN_Init(void);

#endif
